package com.atguigu.school.mapper;

import com.atguigu.school.pojo.Admin;
import com.atguigu.school.pojo.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 访问学生数据
 *
 * @author 刘逸晖
 */
public interface StudentMapper {

    /**
     * 新增学生
     *
     * @param student 学生信息
     */
    void insertStudent(Student student);

    /**
     * 根据 id 更新学生
     *
     * @param student 学生 id 以及新数据
     */
    void updateStudentById(Student student);

    /**
     * 根据 id 查询密码
     *
     * @param id 学生的 id
     * @return 学生的密码
     */
    String selectPasswordById(@Param("id") Integer id);

    /**
     * 根据 id 更新密码
     *
     * @param id          学生的 id
     * @param newPassword 新密码
     */
    void updatePasswordById(@Param("id") Integer id, @Param("newPassword") String newPassword);

    /**
     * 批量删除学生
     *
     * @param ids 预删除学生的 id 列表
     */
    void deleteStudentsByIds(@Param("ids") List<Integer> ids);

    /**
     * 根据名字查询学生
     *
     * @param name 学生的名字
     * @return 学生的信息
     */
    Student selectStudentByName(@Param("name") String name);

    /**
     * 根据名称和所属班级的名称查学生
     *
     * @param name      学生的名称，可为空
     * @param clazzName 班级的名称，可为空
     * @param offset    偏移量，从 0 开始
     * @param size      个数
     * @return 学生列表
     */
    List<Student> selectStudentsByNameAndClazzName(@Param("name") String name, @Param("clazzName") String clazzName, @Param("offset") Integer offset, @Param("size") Integer size);

    /**
     * 根据名称和所属班级的名称统计学生个数
     *
     * @param name      学生的名称
     * @param clazzName 学生所属班级的名称
     * @return 个数
     */
    Integer countStudentsByNameAndClazzName(@Param("name") String name, @Param("clazzName") String clazzName);

}
